package extenstion

/**
 * 限定的使用 、扩展成员方法
 *
 */
class Tc {
    fun take(): String = "Take"
}

class Td {

    fun const(value: String): String = "Td:$value"

    //扩展Tc的成员方法(take)，此扩展类似于修饰者模式
    fun Tc.give(): String = const(take())

    //限定this语法的使用
    fun Tc.thisString() {
        //此处调用Tc的toString方法
        toString()

        //此处调用Td的toString方法
        this@Td.toString()
    }

    fun caller(tc: Tc) {
        println(tc.give())
    }
}

fun main(args: Array<String>) {
    Td().caller(Tc())
}